home *** CD-ROM | disk | FTP | other *** search
- ' +----------------------------------------------------------------------+
- ' | |
- ' | PBClone Copyright (c) 1990-1993 Thomas G. Hanlin III |
- ' | |
- ' +----------------------------------------------------------------------+
-
- DECLARE SUB CalcAttr (BYVAL Foreground%, BYVAL Background%, VAttr%)
- DECLARE SUB DelayV (BYVAL MilliSeconds%)
- DECLARE SUB DReColorArea (BYVAL DSeg%, BYVAL DOfs%, BYVAL TopRow%, BYVAL LeftCol%, BYVAL BottomRow%, BYVAL RightCol%, BYVAL VAttr%)
- DECLARE SUB DXQPrint (BYVAL DSeg%, BYVAL DOfs%, St$, BYVAL Row%, BYVAL Column%, BYVAL VAttr%)
-
- SUB DWindowManager (DSeg%, DOfs%, TopRow%, LeftCol%, BottomRow%, RightCol%, Frame%, Fore%, Back%, Grow%, Shade%, TitleFore%, Title$)
-
- CalcAttr Fore%, Back%, VAttr%
-
- IF Grow% THEN
- XD% = RightCol% - LeftCol% + 1
- YD% = BottomRow% - TopRow% + 1
- Y1% = TopRow% + YD% \ 2
- X1% = LeftCol% + XD% \ 2
- Y2% = BottomRow% - YD% \ 2
- X2% = RightCol% - XD% \ 2
- IF YD% > XD% THEN
- XDelta% = 1
- YDelta% = (YD% + XD% \ 2) \ XD%
- IF YDelta% < 1 THEN YDelta% = 1
- ELSE
- YDelta% = 1
- XDelta% = (XD% + YD% \ 2) \ YD%
- IF XDelta% < 1 THEN XDelta% = 1
- END IF
- DO
- Y1% = Y1% - YDelta%
- IF Y1% < TopRow% THEN Y1% = TopRow%
- X1% = X1% - XDelta%
- IF X1% < LeftCol% THEN X1% = LeftCol%
- Y2% = Y2% + YDelta%
- IF Y2% > BottomRow% THEN Y2% = BottomRow%
- X2% = X2% + XDelta%
- IF X2% > RightCol% THEN X2% = RightCol%
- GOSUB MakeWindow
- IF Grow% > 0 THEN DelayV Grow%
- LOOP UNTIL Y1% = TopRow% AND X1% = LeftCol% AND Y2% = BottomRow% AND X2% = RightCol%
- ELSE
- Y1% = TopRow%
- X1% = LeftCol%
- Y2% = BottomRow%
- X2% = RightCol%
- GOSUB MakeWindow
- END IF
-
- EXIT SUB
-
-
-
- MakeWindow:
- tmp% = X2% - X1% + 1
- IF Frame% AND 1 THEN
- TopSt$ = STRING$(tmp%, "─")
- ELSE
- TopSt$ = STRING$(tmp%, "═")
- END IF
- MidSt$ = SPACE$(tmp%)
- BotSt$ = TopSt$
- SELECT CASE Frame%
- CASE 1
- TopSt$ = "┌" + TopSt$ + "┐"
- MidSt$ = "│" + MidSt$ + "│"
- BotSt$ = "└" + BotSt$ + "┘"
- CASE 2
- TopSt$ = "╔" + TopSt$ + "╗"
- MidSt$ = "║" + MidSt$ + "║"
- BotSt$ = "╚" + BotSt$ + "╝"
- CASE 3
- TopSt$ = "╓" + TopSt$ + "╖"
- MidSt$ = "║" + MidSt$ + "║"
- BotSt$ = "╙" + BotSt$ + "╜"
- CASE 4
- TopSt$ = "╒" + TopSt$ + "╕"
- MidSt$ = "│" + MidSt$ + "│"
- BotSt$ = "╘" + BotSt$ + "╛"
- CASE 5
- TopSt$ = STRING$(tmp% + 2, "▄")
- MidSt$ = "▌" + MidSt$ + "▐"
- BotSt$ = STRING$(tmp% + 2, "▀")
- CASE ELSE
- TopSt$ = SPACE$(tmp% + 2)
- MidSt$ = TopSt$
- BotSt$ = TopSt$
- END SELECT
-
- Row% = Y1% - 1
- Col% = X1% - 1
- IF LEN(Title$) > 0 AND LEN(TopSt$) >= 4 THEN
- St$ = LEFT$(Title$, LEN(TopSt$) - 4)
- MID$(TopSt$, 2) = "[" + St$ + "]"
- DXQPrint DSeg%, DOfs%, TopSt$, Row%, Col%, VAttr%
- CalcAttr TitleFore%, Back%, TAttr%
- DXQPrint DSeg%, DOfs%, St$, Row%, Col% + 2, TAttr%
- ELSE
- DXQPrint DSeg%, DOfs%, TopSt$, Row%, Col%, VAttr%
- END IF
- FOR Row% = Y1% TO Y2%
- DXQPrint DSeg%, DOfs%, MidSt$, Row%, Col%, VAttr%
- NEXT
- DXQPrint DSeg%, DOfs%, BotSt$, Y2% + 1, Col%, VAttr%
-
- Col% = X1% - 3
- IF Shade% < 0 THEN
- IF Shade% = -1 THEN
- SAttr% = 0
- ELSE
- SAttr% = 8
- END IF
- IF Shade% < -2 THEN
- DReColorArea DSeg%, DOfs%, Y1%, X2% + 2, Y2% + 1, X2% + 3, SAttr%
- DReColorArea DSeg%, DOfs%, Y2% + 2, X1% + 1, Y2% + 2, X2% + 3, SAttr%
- ELSE
- DReColorArea DSeg%, DOfs%, Y1%, Col%, Y2% + 1, X1% - 2, SAttr%
- DReColorArea DSeg%, DOfs%, Y2% + 2, Col%, Y2% + 2, X2% - 1, SAttr%
- END IF
- ELSEIF Shade% THEN
- FOR Row% = Y1% TO Y2% + 1
- DXQPrint DSeg%, DOfs%, "░░", Row%, Col%, Shade%
- NEXT
- DXQPrint DSeg%, DOfs%, STRING$(X2% - X1% + 3, "░"), Y2% + 2, Col%, Shade%
- END IF
- RETURN
-
- END SUB
-